﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Net.Security;

namespace _12306_cnBuyTicket
{
    //    问题分析：
    //       Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'.
    //不能和授权计算机为 SSL/TLS 安全通道建立信任关系.
    //       实际原因和证书有很大关系，这里证书是跟证书颁发机构信任的证书，在客户端和服务端建立安全会话的时候，无法信任此证书。
    //    另外一个可能的原因是你其他域里也使用此一个证，这个也有可能导致错误。
    //【4】解决办法：
    //    3.1：定义一个类，来对远程X.509证书的验证，
    //进行处理，返回为true.我们要自己定义一个类，然后在客户单调用WCF服务之前，执行一次即可。代码如下：
    public static class Util
    {
        /// <summary>
        /// 绕过 证书验证
        /// </summary>
        public static void SetCertificatePolicy()
        {
            ServicePointManager.ServerCertificateValidationCallback
                       += RemoteCertificateValidate;
        }

        /// <summary>
        /// Remotes the certificate validate.
        /// </summary>
        private static bool RemoteCertificateValidate(
           object sender, X509Certificate cert,
            X509Chain chain, SslPolicyErrors error)
        {
            // trust any certificate!!!
            //System.Console.WriteLine("Warning, trust any certificate");
            return true;
        }
    }
    //你要在调用操作点先调用这个方法： Util.SetCertificatePolicy();
    //           sResult = wcfServiceProxyHttp.SayHello(sName);
}
